home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-28 | 1.1 KB | 68 lines | [TEXT/CWIE] |
- // Sequence.h
-
- #ifndef Sequence_h
- #define Sequence_h
-
- #ifndef Assert_h
- #include "Assert.h"
- #endif
- #ifndef Prepositions_h
- #include "Prepositions.h"
- #endif
-
- /***
- The head and node classes should conform to these protocols:
-
- class Head: public Sequence<Head,Node>
- {
- public:
- const Node *First() const;
- const Node *Last() const;
- };
-
- class Node
- {
- public:
- const Node *Next() const;
- const Node *Previous() const;
- bool Owned() const;
- const Head& Owner() const;
- };
- ***/
-
- template < class Head, class Node > class SequenceLoop;
-
- template < class Head, class Node >
- class Sequence
- {
- friend class SequenceLoop<Head,Node>;
- typedef SequenceLoop<Head,Node> Loop;
-
- private:
- Loop *firstLoop; // mutable
-
- // not implemented:
- Sequence( const Sequence& );
- void operator=( const Sequence& );
-
- void Register( Loop& ) const;
- void Unregister( Loop& ) const;
-
- protected:
- void WillRemove( Node& );
- void WillAdd( Node&, Before, const Node * );
- void WillAdd( Node&, After, const Node * );
-
- public:
- Sequence()
- : firstLoop( 0 )
- {}
-
- ~Sequence()
- {
- Assert( firstLoop == 0 );
- }
- };
-
- #endif
-